package IO流.解压缩;

import IO流.打印流.字符打印流;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class 解压缩 {
    public static void main(String[] args) throws IOException {
        //1.创建要进行解压的文件对象
        File file = new File("D:\\A\\F.zip");

        //2.创建解压文件的目的地
        File desk=new File("D:\\A");

        //3.解压
        unzip(file, desk);

    }

    //创建一个方法进行解压
    //file:要进行加压的文件
    //desk:解压的目的地
    public static void unzip(File file,File desk) throws IOException {
        //1.创建解压缩流获取要进行解压的文件
        ZipInputStream zip=new ZipInputStream(new FileInputStream(file));
        //2.获取压缩包中的的文件和文件
        //创建一个变量接收文件
        ZipEntry entry;
        while ((entry=zip.getNextEntry())!=null){
            //如果获取到的是文件夹那么就需要创建这个文件夹
            if (entry.isDirectory()){
                //在目的文件中创建这个文件夹
                File f=new File(desk,entry.getName());
                //创建文件夹
                f.mkdirs();
            }else {
                //如果是文件就把这个文件拷贝到指定的文件夹中
                int len;
                byte[] bytes =new byte[1024*1024];
                //创建字节输出流对象
                FileOutputStream fos=new FileOutputStream(new File(desk,entry.getName()));
                while ((len=zip.read(bytes))!=-1){
                    fos.write(bytes,0,len);
                }
                //释放字节输出流
                fos.close();
                //此时压缩包中的一个文件处理完毕了
                zip.closeEntry();
            }
        }
        //解压完了所有了文件
        zip.close();
    }
}
